// 线下门店页面
const request = require('../../utils/request')

Page({
  data: {
    // 门店列表数据
    storeList: [],
    currentStore: null, // 当前选中的门店
    scale: 12, // 地图缩放级别
    markers: [], // 地图标记点
    mapCenter: {
      latitude: 39.941103,
      longitude: 116.392349
    },
    mapLoadFailed: false, // 地图加载是否失败
    loading: true  // 是否正在加载
  },

  onLoad() {
    // 加载门店数据
    this.fetchStores()
  },
  
  // 从API获取门店数据
  async fetchStores() {
    try {
      wx.showLoading({
        title: '加载中...',
        mask: true
      })
      
      const res = await request({
        url: '/api/stores',
        method: 'GET'
      })
      
      if (res.code === 0 && Array.isArray(res.data)) {
        // 设置门店列表数据
        this.setData({
          storeList: res.data,
          loading: false
        })
        
        // 初始化地图标记点
        this.initMapMarkers()
        
        // 计算地图中心点
        this.calculateMapCenter()
      } else {
        console.error('获取门店数据失败:', res)
        this.setData({ loading: false })
        
        wx.showToast({
          title: '获取门店信息失败',
          icon: 'none'
        })
      }
    } catch (error) {
      console.error('获取门店数据错误:', error)
      this.setData({ loading: false })
      
      wx.showToast({
        title: '网络错误，请稍后重试',
        icon: 'none'
      })
    } finally {
      wx.hideLoading()
    }
  },
  
  // 地图错误处理函数
  onMapError(e) {
    console.error('地图加载错误:', e.detail);
    this.setData({
      mapLoadFailed: true
    });
    
    // 不影响用户体验，不展示错误提示
    // 开发环境才显示提示
    if (process.env.NODE_ENV === 'development') {
      wx.showToast({
        title: '地图服务暂时不可用',
        icon: 'none',
        duration: 2000
      });
    }
  },
  
  // 重试加载地图
  reloadMap() {
    this.setData({
      mapLoadFailed: false
    });
    
    // 重新初始化地图标记点
    this.initMapMarkers();
  },
  
  // 计算地图中心点
  calculateMapCenter() {
    if (this.data.storeList.length === 0) return;
    
    let totalLat = 0;
    let totalLng = 0;
    
    this.data.storeList.forEach(store => {
      totalLat += store.location.latitude;
      totalLng += store.location.longitude;
    });
    
    const mapCenter = {
      latitude: totalLat / this.data.storeList.length,
      longitude: totalLng / this.data.storeList.length
    };
    
    this.setData({ mapCenter });
  },

  // 初始化地图标记点
  initMapMarkers() {
    const markers = this.data.storeList.map(store => {
      return {
        id: store.id,
        latitude: store.location.latitude,
        longitude: store.location.longitude,
        width: 30,
        height: 30,
        callout: {
          content: store.name,
          color: '#333333',
          fontSize: 14,
          borderRadius: 4,
          bgColor: '#FFFFFF',
          padding: 8,
          display: 'BYCLICK',
          textAlign: 'center'
        },
        iconPath: '/images/icons/location.png'
      };
    });

    this.setData({ markers });
  },

  // 选择门店
  selectStore(e) {
    const storeId = e.currentTarget.dataset.id;
    const store = this.data.storeList.find(item => item.id === storeId);
    if (store) {
      // 更新当前选中的门店
      this.setData({
        currentStore: store
      });
      
      // 更新地图视图
      if (!this.data.mapLoadFailed) {
        const mapCtx = wx.createMapContext('allStoresMap');
        mapCtx.moveToLocation({
          latitude: store.location.latitude,
          longitude: store.location.longitude,
          success: () => {
            this.setData({ scale: 16 });
          },
          fail: (err) => {
            console.error('移动地图位置失败:', err);
          }
        });
      }
    }
  },
  
  // 地图标记点点击事件
  onMarkerTap(e) {
    const markerId = e.markerId;
    const store = this.data.storeList.find(item => item.id === markerId);
    if (store) {
      this.setData({
        currentStore: store,
        scale: 16
      });
    }
  },

  // 拨打电话
  makePhoneCall(e) {
    // 阻止事件冒泡
    e && e.stopPropagation && e.stopPropagation();
    
    // 获取门店ID
    let storeId = e.currentTarget.dataset.id;
    let store = storeId ? this.data.storeList.find(item => item.id === storeId) : this.data.currentStore;
    
    if (store) {
      wx.makePhoneCall({
        phoneNumber: store.phone,
        success: () => {
          console.log('拨打电话成功');
        },
        fail: (err) => {
          // 用户取消不显示错误
          if (err.errMsg !== 'makePhoneCall:fail cancel') {
            console.error('拨打电话失败:', err);
            wx.showToast({
              title: '拨打电话失败',
              icon: 'none'
            });
          }
        }
      });
    }
  },

  // 导航到门店位置
  navigateToLocation(e) {
    // 阻止事件冒泡
    e && e.stopPropagation && e.stopPropagation();
    
    // 获取门店ID
    let storeId = e.currentTarget.dataset.id;
    let store = storeId ? this.data.storeList.find(item => item.id === storeId) : this.data.currentStore;
    
    if (store) {
      const { latitude, longitude } = store.location;
      wx.openLocation({
        latitude,
        longitude,
        name: store.name,
        address: store.address,
        scale: 18,
        fail: (err) => {
          console.error('打开位置失败:', err);
          wx.showToast({
            title: '位置导航失败',
            icon: 'none'
          });
        }
      });
    }
  }
})